﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _12.file
{
    //File、FileInfo、Directory、DirectoryInfo
    //FileStream - 基本流
    //StreamReader、StreamWriter - 字符流 
    //BinaryReader、BinaryWriter - 干嘛的？
    //Close负责关闭业务，Dispose负责销毁对象。Dispose会负责Close的一切事务，额外还有销毁对象的工作，即Dispose包含Close。
    class Program
    {
        static void Main(string[] args)
        {
            //InfoDemo();
            //FileDemo();
            //FileStreamDemo(); //基本写法 字节流
            //StreamWriterDemo();//字符流

            

            Console.ReadKey();
        }

        static void InfoDemo()
        {
            //FileInfo 
            var info = new FileInfo(@"d:\Program.cs");
            Console.WriteLine(info.Name);
            Console.WriteLine(info.Exists);
            Console.WriteLine(info.DirectoryName);
            Console.WriteLine(info.Length);
            Console.WriteLine(info.IsReadOnly);

            //info.CopyTo(..)
            //info.MoveTo(..)

            //DirectoryInfo
            var dir = new DirectoryInfo(@"d:\");
            Console.WriteLine(dir.Name);
            Console.WriteLine(dir.Parent);//
            Console.WriteLine(dir.Root);
            Console.WriteLine(dir.GetFiles());
            Console.WriteLine(dir.GetDirectories());
        }

        static void FileDemo()
        {
            string fn = "";
            File.Create(fn);
            File.Exists(fn);
            File.Delete(fn);
            File.Copy(fn, fn);
            File.Move(fn, fn);
            //File.Open(fn, mode);
            File.OpenRead(fn);
            File.OpenWrite(fn);
            File.OpenText(fn);//utf8
        }

        //Close负责关闭业务，Dispose负责销毁对象。Dispose会负责Close的一切事务，额外还有销毁对象的工作，即Dispose包含Close
        static void StreamWriterDemo()
        {
            //StreamWriter 可以写入字符
            StreamWriter f = File.CreateText(@"d:\cs_out.txt");//open or create
            f.WriteLine("hehe");
            f.WriteLine(true);
            f.WriteLine(false);
            f.WriteLine(123);
            f.WriteLine(123.456);
            f.Flush();
            f.Close(); //using里面的object必须能被隐式的转变为IDisposable才行，所以当然只会调用Dispose()

            Directory.CreateDirectory(@"d:\cs_dir");//open or create
        }

        //Close负责关闭业务，Dispose负责销毁对象。Dispose会负责Close的一切事务，额外还有销毁对象的工作，即Dispose包含Close
        static void FileStreamDemo()
        {
            //FileStream只能写入byte或者byte[]
            FileStream f = File.Create(@"d:\cs_out.bb"); //
            f.WriteByte(1);
            f.WriteByte(1);
            f.WriteByte(1);
            f.Flush();
            //f.Close();//
            f.Dispose();//释放的更彻底


            using (FileStream fs = File.Create(@"d:\cs_out2.bb"))
            {
                for (int i = 0; i < 10; i++)
                {
                    fs.WriteByte(1);
                }
                fs.Flush();
            }
        }
    }
}
